<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// int num1 = 123;
// float num2 = 123.45;
// char c1 = 'a';

// var n1 = 123;
// var n2 = 123.45;
// var s1 = 'abc';


// ES6中的let和const

// let用于声明变量（类似于var）
// let n1 = 123;
// let n2 = 123.45;

// let与var不同的地方：

// 1.let不允许重复声明变量(同一作用域下)
// var a = 123;
// var a = 456;
// console.log( a );// 456

// let b = 123;
// let b = 456;// 报错
// console.log( b );

// var c = 666;
// let c = 999;// 报错
// console.log( c );


// 2.let声明的变量不会添加到window对象中
// var abc = 123;
// console.log( abc );// 123
// console.log( window.abc );// 123

// let hehe = '呵呵';
// console.log( hehe );// '呵呵'
// console.log( window.hehe );// undefined


// 3.let声明的变量仅在块中起作用 {块级作用域}
// {
//     var num1 = 123;
// }
// console.log( num1 );// 123

// {
//     let num2 = 456;
// }
// console.log( num2 );// 报错

// for (var i = 0; i < 5; i++) {
//     console.log( i );// 0 1 2 3 4
// }
// console.log( i );// 5

// var i = 0;
// for (; i < 5; i++) {
//     console.log( i );// 0 1 2 3 4
// }
// console.log( i );// 5

// for (let i = 0; i < 5; i++) {
//     console.log( i );// 0 1 2 3 4
// }
// console.log( i );// 报错

// if (123) {
//     var a = 11;
// }
// console.log( a );// 11

// if (123) {
//     let b = 22;
// }
// console.log( b );// 报错 


// 4.let声明的变量不能和形参重名
// function fun(x){
//     var x = 2;
//     console.log( x );// 2
// }
// fun(1);

// function fun2(x){
//     let x = 2;// 报错
//     console.log( x );
// }
// fun2(1);


// 5.let声明的变量不会提升
// console.log( a );// undefined
// var a = 123;

// console.log( b );// 报错
// let b = 123;

// 暂时性死区TDZ
// var x = 1;
// if (123) {// let声明会绑定当前区块
//     console.log( x );
//     let x = 2;
// }
// console.log( x );


// const用于声明常量
// const声明的常量不能重新赋值，其他特征基本和let一样
// 常量通常使用大写字母命名
// const PI = 3.14;
// PI = 3.1415926;// 报错

// const声明的常量值为引用类型时，内存地址不能改变，但是，对象的属性值可以改变
const OBJ = {
    name: '老王',
    sex: '男'
}
OBJ.sex = '女';
console.log( OBJ.sex );// '女'

// OBJ = {};// 报错，地址变了

</script>
</body>
</html>